#include "../include/structure.h"

/**
 * @brief 按照个数初始化进程池
 * @param list 维护的记录池中进程的数组 
 * @param num 要初始化的进程池中进程的个数
*/
int initPool(proc_status_t *list, int num){

    for(int i = 0; i < num; i++){
        int socket_local_fd[2];
        socketpair(AF_LOCAL, SOCK_STREAM, 0, socket_local_fd);
        
        // create a son process        
        pid_t son_pid = fork();
        ERROR_CHECK(son_pid, -1, "fork");

        if(son_pid == 0){
            // child
            // read 0
            close(socket_local_fd[1]);
            
            sonProcMain(socket_local_fd[0]);

        }else{
            // parent
            // wirte 1
            list[i].pid = son_pid;
            list[i].status = FREE;

            close(socket_local_fd[0]);
            list[i].local_socket_fd = socket_local_fd[1];

        }
    }
    return 0;
}

// 把主进程监听到的net_fd选择一个子进程处理
int toSon(int net_fd, proc_status_t *list, int num){

    for(int i = 0; i < num; i++){
        if(list[i].status == FREE){
            localNetFdSend(net_fd, list[i].local_socket_fd);
            list[i].status = BUSY;
            
             // 只找一个空闲的即可
            break;
        }
    }

    // TODO 进程池扩容
    return 0;
}